'''
题目：写一个函数，求两个整数之和，要求在函数体内不得使用+、-、*、/四则运算符号。
'''

'''
思路一：用sum函数，但是特别注意sum()求和里面是个[]列表对象，直接输入num，num2是不行的

26ms
5632k
'''

# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        return sum([num1,num2])

'''
思路二：
        首先看十进制是如何做的： 5+7=12，三步走
        第一步：相加各位的值，不算进位，得到2。
        第二步：计算进位值，得到10. 如果这一步的进位值为0，那么第一步得到的值就是最终结果。

        第三步：重复上述两步，只是相加的值变成上述两步的得到的结果2和10，得到12。

        同样我们可以用三步走的方式计算二进制值相加： 5-101，7-111 第一步：相加各位的值，不算进位，得到010，
        二进制每位相加就相当于各位做异或操作，101^111。

        第二步：计算进位值，得到1010，相当于各位做与操作得到101，再向左移一位得到1010，(101&111)<<1。

        第三步重复上述两步， 各位相加 010^1010=1000，进位值为100=(010&1010)<<1。
             继续重复上述两步：1000^100 = 1100，进位值为0，跳出循环，1100为最终结果。

超时了
'''

# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        while num2:
            # 异或运算相当于只求和不进位
            sum = num1 ^ num2
            # 与操作，并向左移一位，相当于求进位
            carray = (num1 & num2) << 1
            num1 = sum
            num2 = carray
        return num1